package com.code1030.extensdDemo;

public class TestDemo2 {
    public static void main(String[] args) {
//        Zi z1 = new Zi();
//构造方法不能被继承
//Zi z2=new Zi("张三",18);

//    成员变量：public private protected 都可以被继承

        //成员方法 public可以被集成 private 不能被继承
        //原理：jvm抽离出来了虚方法表 每次继承的时候都会集成虚方法表
        // 虚方法表：非private 非static 非final


//        重写方法时在前方加上@Override 可以检查是否重写成功
//        方法重写一定是发生在子父继承中
//        原理：就是覆盖父继承下来的类的方法
//        重写方法时，子类的方法权限必须大于等于父类的方法权限
//        重写方法时，子类的方法返回值类型必须和父类的方法返回值类型相同
//        只有被添加到虚方法表的方法才能被重写

        // 子类构造方法的第一行默认会存在super 无论你写没写
        // 子类不能继承父类的构造方法 但能调用
        // 用super调用父类的无参构造或有参构造
        Zi zi = new Zi("张三", 18);
//        System.out.println(zi.name);
    }
}

class Fu {
    String name;
    int age;

    public Fu() {
        System.out.println("父类无参构造");
    }

    public Fu(String name, int age) {
        System.out.println("父类有参构造");
        this.name = name;
        this.age = age;
    }

}

class Zi extends Fu {
    public Zi(String name, int age) {
//        super();
        super(name, age);
//        System.out.println("子类无参构造");
    }
}
